CORS (Cross-Origin Resource Sharing) হল একটি নিরাপত্তা বৈশিষ্ট্য যা এক ওয়েব পৃষ্ঠাকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করার অনুমতি দেয়। সাধারণত, ব্রাউজার বিভিন্ন ডোমেইন থেকে প্রাপ্ত রিকোয়েস্টকে সীমাবদ্ধ রাখে। CORS নীতির মাধ্যমে আপনি API বা ওয়েব অ্যাপ্লিকেশনের রিসোর্স গুলোকে নির্দিষ্ট ডোমেইন বা উৎস থেকে অ্যাক্সেস করার অনুমতি দিতে পারেন।
Spring Security-তে CORS কনফিগারেশন করতে দুটি সাধারণ পদ্ধতি রয়েছে:
- Global CORS Configuration (Spring Security Configuration থেকে)
- Custom CORS Filter (একটি কাস্টম ফিল্টার তৈরি করে)
CORS Configuration Spring Security-তে:
Step 1: Global CORS Configuration:
Spring 5 এবং Spring Boot 2.4 এর পর থেকে CORS কনফিগারেশন করার জন্য Spring Security-তে CorsConfigurationSource এবং CorsFilter ব্যবহার করা হয়।
1. Spring Security Configuration Class তৈরি:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.cors.CorsFilter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and() // Enable CORS
.authorizeRequests()
.antMatchers("/public/**").permitAll() // Open endpoints
.anyRequest().authenticated(); // All other requests need authentication
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); // Allow cookies to be sent
config.addAllowedOrigin("http://localhost:3000"); // Allow specific origin (for example, frontend app)
config.addAllowedHeader("*"); // Allow all headers
config.addAllowedMethod("GET"); // Allow GET method
config.addAllowedMethod("POST"); // Allow POST method
source.registerCorsConfiguration("/**", config); // Apply to all endpoints
return new CorsFilter(source);
}
}
ব্যাখ্যা:
config.setAllowCredentials(true): ক্লায়েন্ট সাইড থেকে কুকি বা ক্রেডেনশিয়ালস পাঠানোর অনুমতি দেয়।config.addAllowedOrigin("http://localhost:3000"): শুধুমাত্রhttp://localhost:3000থেকে রিকোয়েস্ট অনুমোদিত। আপনি এখানে আপনার প্রয়োজন অনুসারে ডোমেইন বা ওয়েব অ্যাপ্লিকেশনের ইউআরএল দিতে পারেন।config.addAllowedMethod("GET"): GET এবং POST এর মতো HTTP মেথড অনুমোদিত। অন্য মেথডগুলোর জন্যও অনুমতি দিতে পারেন।
Step 2: Spring Boot Application Class
Spring Boot Application ক্লাসে @SpringBootApplication অ্যানোটেশন যোগ করুন এবং সিস্টেম চালু করুন।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
এখন, আপনার অ্যাপ্লিকেশনটি http://localhost:8080 চালু হয়ে যাবে, এবং CORS কনফিগারেশনটি http://localhost:3000 থেকে আগত রিকোয়েস্ট অনুমোদন করবে।
Custom CORS Filter তৈরি:
CORS Filter তৈরি করার মাধ্যমে আপনি সম্পূর্ণ কাস্টমাইজড CORS পলিসি সেট করতে পারবেন। এটি বিশেষত প্রয়োজনে দরকার হয়, যেখানে আপনি API রিকোয়েস্টের ভিত্তিতে CORS কনফিগারেশন পরিবর্তন করতে চান।
Step 1: Custom CORS Filter Class
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class CustomCorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, javax.servlet.http.HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*"); // Allow all origins, change to specific domain if needed
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}
ব্যাখ্যা:
response.addHeader("Access-Control-Allow-Origin", "*"): সমস্ত উৎস থেকে আসা রিকোয়েস্ট অনুমোদিত।Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS সহ সমস্ত HTTP মেথড অনুমোদিত।OPTIONSরিকোয়েস্ট হলে শুধুমাত্রSC_OK(200) স্ট্যাটাস কোড পাঠানো হয়। এটা CORS প্রিপ-flight রিকোয়েস্টের জন্য প্রয়োজন।
Step 2: Custom Filter Register করা
Spring Boot অ্যাপ্লিকেশন ক্লাসে এই ফিল্টারটি রেজিস্টার করুন।
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<CustomCorsFilter> corsFilter() {
FilterRegistrationBean<CustomCorsFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new CustomCorsFilter());
bean.addUrlPatterns("/api/*"); // Apply filter to your API URLs
return bean;
}
}
ব্যাখ্যা:
addUrlPatterns("/api/*"): এই কাস্টম CORS ফিল্টারটি/api/*URL প্যাটার্নের সমস্ত রিকোয়েস্টে কাজ করবে।FilterRegistrationBeanSpring Boot ফিল্টার রেজিস্টার করার জন্য ব্যবহার করা হয়।
Step 3: Application Configuration
Spring Boot Application ক্লাসে @SpringBootApplication অ্যানোটেশন যোগ করুন এবং সিস্টেম চালু করুন।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
এখন আপনার কাস্টম CORS ফিল্টারটি আপনার API রিকোয়েস্টে কাজ করবে।
উপসংহার:
- Global CORS Configuration: যদি আপনার অ্যাপ্লিকেশনটি একটি সুনির্দিষ্ট রিসোর্স সেটের জন্য CORS কনফিগার করতে চান তবে Spring Security-তে CORS কনফিগারেশন করা একটি সহজ এবং উপযুক্ত পদ্ধতি।
- Custom CORS Filter: যদি আপনি আরও কাস্টমাইজড সিকিউরিটি এবং বিশেষ ধরনের CORS নীতি প্রয়োগ করতে চান, তবে একটি কাস্টম CORS ফিল্টার তৈরি করা প্রয়োজন।
CORS কনফিগারেশন সঠিকভাবে ব্যবহৃত হলে, এটি Cross-Origin রিকোয়েস্টগুলোকে সুরক্ষিতভাবে পরিচালনা করতে সাহায্য করে এবং আপনার API বা ওয়েব অ্যাপ্লিকেশনকে নিরাপদ রাখে।
Read more